#ifdef HERZELEID_DESKTOP

 #if _MSC_VER
  #pragma once
 #endif

 #ifndef __HERZELEID_KEYEVENTARGS_INCLUDED__
  #define __HERZELEID_KEYEVENTARGS_INCLUDED__
  #include "HerzeleidCorePhysicalKeyStatus.hxx"
  #include "HerzeleidCoreDispatcherInc.hxx"
  #include "HerzeleidEventArgsBase.hxx"
  #include "HerzeleidVirtualKey.hxx"
  #include "HerzeleidUICore.hxx"

// Contains the arguments returned by a virtual key event.
HerzeleidUICoreNamespaceBegin class KeyEventArgs : public EventArgsBase
{
	friend class CoreDispatcher;
	typedef HerzeleidSystemNamespaceImpl::VirtualKey Key;						// Virtual key type shortcut. 
	TinyTypeDecl( Key );														// Virtual key type shortcut. 

protected:

	// Members

	Key m_eVirtualKey;															// Key that maps to the key that was pressed.
	CorePhysicalKeyStatus m_Status;												// Status of a key at the time the event is fired.

public:

	KeyEventArgs();

	// Properties
	
	DeclGetPropOnly( Key, VirtualKey );											// Gets the virtual key that maps to the key that was pressed.
	DeclGetPropOnly( CorePhysicalKeyStatus, KeyStatus );						// Gets the status of a key at the time the event is fired.
	inline DeclConstTypedGetterFor( KeyConst, VirtualKey ) { return m_eVirtualKey; }						// Gets the virtual key that maps to the key that was pressed.
	inline DeclConstTypedGetterFor( CorePhysicalKeyStatusConst, KeyStatus ) { return m_Status; }			// Gets the status of a key at the time the event is fired.

} HerzeleidUICoreNamespaceEnd; 

 #endif // !HERZELEID_KEYEVENTARGS_INCLUDED__
#endif // !HERZELEID_DESKTOP
